package com.three.box.network.kt

import com.alibaba.fastjson2.JSONObject
import com.three.box.entity.ApiResult
import com.three.box.entity.ApiResultList
import com.three.box.entity.Box
import com.three.box.entity.BoxHistory
import com.three.box.entity.BoxLogResult
import com.three.box.entity.BoxRecord
import com.three.box.entity.LoginResult
import com.three.box.entity.OperateType
import com.three.box.entity.ProductConfigResult
import retrofit2.Call
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Query

/**
 * 睿和api请求
 */
interface AppApiService {

    /**
     * 登录
     */
    @POST("auth/login")
    fun login(@Body body: JSONObject): Call<ApiResult<LoginResult>>

    /**
     * 注册
     */
    @POST("auth/register")
    fun register(@Body body: JSONObject): Call<ApiResult<LoginResult>>

    /**
     * 获取出入库类型
     */
    @GET("operateType/listAll")
    fun operateType(@Query("type") type: Int): Call<ApiResult<List<OperateType>>>

    /**
     * 获取物品以及分组配置
     */
    @GET("config")
    fun configInfo(): Call<ApiResult<ProductConfigResult>>

    /**
     * 根据二维码信息获取箱子信息 如果箱子没有绑定到数据库 则会绑定到数据库
     *
     * 返回箱子信息 以及已经添加的数据
     */
    @GET("box/info")
    fun boxInfo(@Query("boxId") boxId: String): Call<ApiResult<Box>>

    /**
     * 入箱出箱保存数据
     */
    @POST("box/product/save")
    fun saveBox1(@Body body: JSONObject): Call<ApiResult<String>>

    /**
     * 入箱出箱保存数据
     */
    @POST("box/product/enterOrOut")
    fun saveBox(@Body body: JSONObject): Call<ApiResult<String>>

    /**
     * 入箱出箱保存数据
     */
    @GET("box/productHistory/listByBoxId")
    fun productHistory(@Query("boxId") boxId: Int): Call<ApiResult<BoxLogResult>>

    /**
     * 获取某个箱子的出入库订单记录
     * 参考后台管理系统中 产品入库/产品出库 页面
     * 此接口返回的id可以查看此记录 对应产品的出入库记录
     */
    @GET("order/orderList")
    fun orderList(@Query("boxId") boxId: Int, @Query("page") page: Int, @Query("pageSize") pageSize: Int): Call<ApiResultList<BoxRecord>>

    /**
     * 订单详情 返回此订单的物品详细出入库记录
     * 参考后台管理系统中 产品入库/产品出库 页面 列表查看详情
     * boxProductHistoryInfo 中字段描述
     */
    @GET("order/info")
    fun orderInfo(@Query("id") id: Int): Call<ApiResult<BoxRecord>>
}